// import projectConfig from '@/core/config';
import { buildGetUrl } from '@/utils';
import { mapMutations } from 'vuex';
import { getToken, getAppId, getObjectFromSessionStorage } from '@/utils';
// import { Notify } from 'vant';

/**
 * 上传文件组件相关方法
 */
const uploadMixin = {
  methods: {
    /**
     * 解析返回的上传文件数据
     * @param {String} jsonData 上传文件数据，[{name, downloadUri, filename}]
     * @param {Object} params 上传文件的参数
     * @returns {Array} 上传文件信息，[{name, downloadUri, filename, url}]
     */
    parseUploadData (jsonData, params) {
      let pathList = [];
      if (jsonData != null) {
        try {
          pathList = JSON.parse(jsonData);
        } catch (e) {
          console.error(e);
        }
      }

      return Array.isArray(pathList) ? pathList.map((item) => {
        let downloadParams = {...params};
        downloadParams.filename = item.filename;
        return {
          ...item,
          url: this.getUploadFileUrl(item, downloadParams)
        }
      }) : [];
    },
    /**
     * 获得上传文件url列表
     * @param {*} jsonData 上传文件数据，[{name, downloadUri, filename}]
     * @param {*} params 上传文件的参数
     * @returns {Array} 文件url列表
     */
    getPictureList (jsonData, params) {
      let tempList = this.parseUploadData(jsonData, params);
      if (Array.isArray(tempList)) {
        return tempList.map(item => item.url);
      } else {
        return [];
      }
    },
    /**
     * 将选中文件信息格式化成json信息
     * @param {Array} fileList 上传文件列表，[{name, fileUrl, data}]
     */
    fileListToJson (fileList) {
			console.log(fileList)
      if (Array.isArray(fileList)) {
        return JSON.stringify(fileList.map((item) => {
          return {
            name: item.name,
            downloadUri: item.downloadUri || item.response.data.downloadUri,
            filename: item.filename || item.response.data.filename,
            uploadPath: item.uploadPath || item.response.data.uploadPath
          }
        }));
      } else {
        return undefined;
      }
    },
    /**
     * 获得上传文件url
     * @param {*} item 上传文件
     * @param {*} params 上传文件的参数
     */
    getUploadFileUrl (item, params) {
			// console.log(item)
			// console.log(params)
      if (item == null || item.downloadUri == null) {
        return null;
      } else {
        let currentMenuId = getObjectFromSessionStorage('currentMenuId');
        params.Authorization = getToken();
        params.MenuId = currentMenuId;
        params.AppCode = getAppId();
        return buildGetUrl(item.downloadUri, params);
      }
    },
    /**
     * 获得上传接口
     * @param {*} url 上传路径
     */
    // getUploadActionUrl (url) {
    //   if (url != null && url[0] === '/') {
    //     url = url.substr(1);
    //   }
    //   return projectConfig.baseUrl + url;
    // },
    /**
     * 上传文件是否图片文件
     * @param {*} file 上传文件
     */
    // pictureFile (file) {
    //   if (['image/jpeg', 'image/jpg', 'image/png'].indexOf(file.type) !== -1) {
    //     return true;
    //   } else {
    //     Notify({ type: 'warning', message: '图片文件格式不正确，请重新选择' });
    //     return false;
    //   }
    // }
  },
  computed: {
    getUploadHeaders () {
      let token = getToken();
      let appId = getAppId();
      let currentMenuId = getObjectFromSessionStorage('currentMenuId');
      let header = {
        Authorization: token,
        MenuId: currentMenuId
      }
      if (appId != null && appId !== '') header.AppCode = appId;
      
      return header;
    }
  }
};
/**
 * 页面缓存相关方法
 */
const cachePageMixin = {
  methods: {
    /**
     * 移除缓存页面
     * @param {*} name 缓存组件的名称
     */
    removeCachePage (name) {
      this.removeCachePage(name);
    },
    /**
     * 从跳转页面返回并且刷新当前页面时调用
     */
    onResume () {
    },
    ...mapMutations(['addCachePage', 'removeCachePage'])
  },
  created () {
    this.addCachePage(this.$options.name);
  },
  mounted () {
    this.$route.meta.refresh = false;
  },
  activated () {
    if (this.$route && this.$route.meta && this.$route.meta.refresh) {
      this.onResume();
    }
    this.$route.meta.refresh = true;
  }
}
/**
 * 缓存页面跳转页面相关方法
 */
const cachedPageChildMixin = {
  data () {
    return {
      // 是否刷新父页面
      refreshParentCachedPage: false
    }
  },
  beforeRouteLeave (to, from, next) {
    if (to.meta == null) to.meta = {};
    to.meta.refresh = this.refreshParentCachedPage;
    next();
  }
}

export {
  uploadMixin,
  // cachePageMixin,
  // cachedPageChildMixin
}
